package cn.biplam.common.bean.md;

import cn.biplam.common.bean.Bean;
import cn.biplam.common.client.DataFilter;
import cn.biplam.common.wrapper.ErrorMessage;

/**
 * 单个表外键关系操作
 */
public abstract class MdFkRelationTable extends Bean{
	
	
	/**
	 * 取模型对象的表名称
	 * @return	String
	 * @throws 	ErrorMessage
	 */
	public abstract String getReId() throws ErrorMessage;

	/**
	 * 取模型对象的表名称
	 * @return	String
	 * @throws 	ErrorMessage
	 */
	public abstract String getReName() throws ErrorMessage;

	/**
	 * 取模型对象的表中文名称
	 * @return	String
	 * @throws 	ErrorMessage
	 */
	public abstract String getMainTableId() throws ErrorMessage;

	/**
	 * 取模型对象的表说明
	 * @return	String
	 * @throws 	ErrorMessage
	 */
	public abstract String getForeingTableId() throws ErrorMessage;

	/**
	 * 更新记录集
	 * @param filter 过滤器
	 * @throws ErrorMessage
	 */
	public abstract void update(DataFilter filter) throws ErrorMessage;

	/**
	 * 插入记录集
	 * @param filter 过滤器
	 * @throws ErrorMessage
	 */
	public abstract String insert(DataFilter filter) throws ErrorMessage;

	/**
	 * 根据关系id删除记录表关联信息
	 * @throws ErrorMessage
	 */
	public abstract void delete() throws ErrorMessage;

	/**
	 * 根据表关系id 删除表列属于此表关系id下的所有列关联
	 * @throws ErrorMessage
	 */
	public abstract void deleteRelaCol() throws ErrorMessage;

	/**
	 * 判断对象信息是否存在
	 * @return	boolean
	 */
	public abstract boolean exist();
	
	/**
	 * 新建实例
	 * @param classParams 类参数
	 * @return 	MdFkRelationTable实例
	 * @throws 	ErrorMessage
	 */
	public static MdFkRelationTable getNewInstance(Object... classParams) throws ErrorMessage{
		return (MdFkRelationTable)get(MdFkRelationTable.class.getSimpleName(), classParams);
	}
	
	/**
	 * 新建实例
	 * @param userID     用户信息
	 * @param reId      外键关系ID
	 * @param modelType 模型类型
	 * @return 	MdFkRelationTable实例
	 * @throws 	ErrorMessage
	 */
	public static MdFkRelationTable getNewInstance(String userID,String reId,String modelType) throws ErrorMessage{
		return (MdFkRelationTable)get(MdFkRelationTable.class.getSimpleName(),
				userID, reId, 
				modelType);
	}
	
	/** 关系id 字段名 */
	public abstract String getREID();
	
	/** 关系名称 字段名 */
	public abstract String getRE_NAME();
	
	/** 主表id 字段名 */
	public abstract String getMAIN_TABLE_ID() ;
	
	/** 外键表id 字段名 */
	public abstract String getFOREIGN_TABLE_ID();

}